package org.jeecgframework.web.controller;

import org.apache.log4j.Logger;
import org.jeecgframework.core.common.controller.BaseController;
import org.jeecgframework.core.common.exception.BusinessException;
import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery;
import org.jeecgframework.core.common.model.json.AjaxJson;
import org.jeecgframework.core.common.model.json.DataGrid;
import org.jeecgframework.core.constant.Globals;
import org.jeecgframework.core.util.ExceptionUtil;
import org.jeecgframework.core.util.MyBeanUtils;
import org.jeecgframework.core.util.ResourceUtil;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.entity.TemplateExportParams;
import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.vo.TemplateExcelConstants;
import org.jeecgframework.tag.core.easyui.TagUtil;
import org.jeecgframework.web.system.pojo.base.CbsServiceLogEntity;
import org.jeecgframework.web.service.CbsServiceLogServiceI;
import org.jeecgframework.web.system.service.SystemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;


/**
 * @author onlineGenerator
 * @version V1.0
 * @Title: Controller
 * @Description: 服务处理日志
 * @date 2017-12-22 14:30:40
 */
@Scope("prototype")
@Controller
@RequestMapping("/cbsServiceLogController")
public class CbsServiceLogController extends BaseController {
    /**
     * Logger for this class
     */
    private static final Logger logger = Logger.getLogger ( CbsServiceLogController.class );

    @Autowired
    private CbsServiceLogServiceI cbsServiceLogService;
    @Autowired
    private SystemService systemService;
    private String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }


    /**
     * 服务处理日志列表 页面跳转
     *
     * @return
     */
    @RequestMapping(params = "cbsServiceLog")
    public ModelAndView cbsServiceLog(HttpServletRequest request) {
        return new ModelAndView ( "com/zybk/cbsservicelog/cbsServiceLogList" );
    }

    /**
     * easyui AJAX请求数据
     *
     * @param request
     * @param response
     * @param dataGrid
     * @param user
     */

    @RequestMapping(params = "datagrid")
    public void datagrid(CbsServiceLogEntity cbsServiceLog, HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
        CriteriaQuery cq = new CriteriaQuery ( CbsServiceLogEntity.class, dataGrid );
        //查询条件组装器
        org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql ( cq, cbsServiceLog, request.getParameterMap () );
        try {
            //自定义追加查询条件
        } catch (Exception e) {
            throw new BusinessException ( e.getMessage () );
        }
        cq.add ();
        this.cbsServiceLogService.getDataGridReturn ( cq, true );
        TagUtil.datagrid ( response, dataGrid );
    }

    /**
     * 服务处理日志新增页面跳转
     *
     * @return
     */
    @RequestMapping(params = "goAdd")
    public ModelAndView goAdd(CbsServiceLogEntity cbsServiceLog, HttpServletRequest req) {
        if (StringUtil.isNotEmpty ( cbsServiceLog.getId () )) {
            cbsServiceLog = cbsServiceLogService.getEntity ( CbsServiceLogEntity.class, cbsServiceLog.getId () );
            req.setAttribute ( "cbsServiceLogPage", cbsServiceLog );
        }
        return new ModelAndView ( "com/zybk/cbsservicelog/cbsServiceLog-add" );
    }


    /**
     * 添加服务处理日志
     *
     * @param ids
     * @return
     */
    @RequestMapping(params = "doAdd")
    @ResponseBody
    public AjaxJson doAdd(CbsServiceLogEntity cbsServiceLog, HttpServletRequest request) {
        AjaxJson j = new AjaxJson ();
        message = "服务处理日志添加成功";
        try {
            cbsServiceLogService.save ( cbsServiceLog );
            systemService.addLog ( message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO );
        } catch (Exception e) {
            e.printStackTrace ();
            message = "服务处理日志添加失败";
            throw new BusinessException ( e.getMessage () );
        }
        j.setMsg ( message );
        return j;
    }

    /**
     * 服务处理日志编辑页面跳转
     *
     * @return
     */
    @RequestMapping(params = "goUpdate")
    public ModelAndView goUpdate(CbsServiceLogEntity cbsServiceLog, HttpServletRequest req) {
        if (StringUtil.isNotEmpty ( cbsServiceLog.getId () )) {
            cbsServiceLog = cbsServiceLogService.getEntity ( CbsServiceLogEntity.class, cbsServiceLog.getId () );
            req.setAttribute ( "cbsServiceLogPage", cbsServiceLog );
        }
        return new ModelAndView ( "com/zybk/cbsservicelog/cbsServiceLog-update" );
    }

    /**
     * 更新服务处理日志
     *
     * @param ids
     * @return
     */
    @RequestMapping(params = "doUpdate")
    @ResponseBody
    public AjaxJson doUpdate(CbsServiceLogEntity cbsServiceLog, HttpServletRequest request) {
        AjaxJson j = new AjaxJson ();
        message = "服务处理日志更新成功";
        CbsServiceLogEntity t = cbsServiceLogService.get ( CbsServiceLogEntity.class, cbsServiceLog.getId () );
        try {
            MyBeanUtils.copyBeanNotNull2Bean ( cbsServiceLog, t );
            cbsServiceLogService.saveOrUpdate ( t );
            systemService.addLog ( message, Globals.Log_Type_UPDATE, Globals.Log_Leavel_INFO );
        } catch (Exception e) {
            e.printStackTrace ();
            message = "服务处理日志更新失败";
            throw new BusinessException ( e.getMessage () );
        }
        j.setMsg ( message );
        return j;
    }


    /**
     * 删除服务处理日志
     *
     * @return
     */
    @RequestMapping(params = "doDel")
    @ResponseBody
    public AjaxJson doDel(CbsServiceLogEntity cbsServiceLog, HttpServletRequest request) {
        AjaxJson j = new AjaxJson ();
        cbsServiceLog = systemService.getEntity ( CbsServiceLogEntity.class, cbsServiceLog.getId () );
        message = "服务处理日志删除成功";
        try {
            cbsServiceLogService.delete ( cbsServiceLog );
            systemService.addLog ( message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO );
        } catch (Exception e) {
            e.printStackTrace ();
            message = "服务处理日志删除失败";
            throw new BusinessException ( e.getMessage () );
        }
        j.setMsg ( message );
        return j;
    }

    /**
     * 批量删除服务处理日志
     *
     * @return
     */
    @RequestMapping(params = "doBatchDel")
    @ResponseBody
    public AjaxJson doBatchDel(String ids, HttpServletRequest request) {
        AjaxJson j = new AjaxJson ();
        message = "服务处理日志删除成功";
        try {
            for (String id : ids.split ( "," )) {
                CbsServiceLogEntity cbsServiceLog = systemService.getEntity ( CbsServiceLogEntity.class,
                        id
                );
                cbsServiceLogService.delete ( cbsServiceLog );
                systemService.addLog ( message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO );
            }
        } catch (Exception e) {
            e.printStackTrace ();
            message = "服务处理日志删除失败";
            throw new BusinessException ( e.getMessage () );
        }
        j.setMsg ( message );
        return j;
    }

    /**
     * 导入功能跳转
     *
     * @return
     */
    @RequestMapping(params = "upload")
    public ModelAndView upload(HttpServletRequest req) {
        return new ModelAndView ( "com/zybk/cbsservicelog/cbsServiceLogUpload" );
    }

    /**
     * 导出excel
     *
     * @param request
     * @param response
     */
    @RequestMapping(params = "exportXls")
    public String exportXls(CbsServiceLogEntity cbsServiceLog, HttpServletRequest request, HttpServletResponse response
            , DataGrid dataGrid, ModelMap modelMap) {
        CriteriaQuery cq = new CriteriaQuery ( CbsServiceLogEntity.class, dataGrid );
        org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql ( cq, cbsServiceLog, request.getParameterMap () );
        List<CbsServiceLogEntity> cbsServiceLogs = this.cbsServiceLogService.getListByCriteriaQuery ( cq, false );
        modelMap.put ( NormalExcelConstants.FILE_NAME, "服务处理日志" );
        modelMap.put ( NormalExcelConstants.CLASS, CbsServiceLogEntity.class );
        modelMap.put ( NormalExcelConstants.PARAMS, new ExportParams ( "服务处理日志列表", "导出人:" + ResourceUtil.getSessionUserName ().getRealName (),
                "导出信息" ) );
        modelMap.put ( NormalExcelConstants.DATA_LIST, cbsServiceLogs );
        return NormalExcelConstants.JEECG_EXCEL_VIEW;
    }

    /**
     * 导出excel 使模板
     *
     * @param request
     * @param response
     */
    @RequestMapping(params = "exportXlsByT")
    public String exportXlsByT(CbsServiceLogEntity cbsServiceLog, HttpServletRequest request, HttpServletResponse response
            , DataGrid dataGrid, ModelMap modelMap) {
        modelMap.put ( TemplateExcelConstants.FILE_NAME, "服务处理日志" );
        modelMap.put ( TemplateExcelConstants.PARAMS, new TemplateExportParams ( "Excel模板地址" ) );
        modelMap.put ( TemplateExcelConstants.MAP_DATA, null );
        modelMap.put ( TemplateExcelConstants.CLASS, CbsServiceLogEntity.class );
        modelMap.put ( TemplateExcelConstants.LIST_DATA, null );
        return TemplateExcelConstants.JEECG_TEMPLATE_EXCEL_VIEW;
    }

    @SuppressWarnings("unchecked")
    @RequestMapping(params = "importExcel", method = RequestMethod.POST)
    @ResponseBody
    public AjaxJson importExcel(HttpServletRequest request, HttpServletResponse response) {
        AjaxJson j = new AjaxJson ();

        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap ();
        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet ()) {
            MultipartFile file = entity.getValue ();// 获取上传文件对象
            ImportParams params = new ImportParams ();
            params.setTitleRows ( 2 );
            params.setHeadRows ( 1 );
            params.setNeedSave ( true );
            try {
                List<CbsServiceLogEntity> listCbsServiceLogEntitys = ExcelImportUtil.importExcelByIs ( file.getInputStream (), CbsServiceLogEntity.class, params );
                for (CbsServiceLogEntity cbsServiceLog : listCbsServiceLogEntitys) {
                    cbsServiceLogService.save ( cbsServiceLog );
                }
                j.setMsg ( "文件导入成功！" );
            } catch (Exception e) {
                j.setMsg ( "文件导入失败！" );
                logger.error ( ExceptionUtil.getExceptionMessage ( e ) );
            } finally {
                try {
                    file.getInputStream ().close ();
                } catch (IOException e) {
                    e.printStackTrace ();
                }
            }
        }
        return j;
    }
}
